package br.com.tiespec.ejb.EjbInterface;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import br.com.tiespec.model.Enum.TipoSortOrder;
import br.com.tiespec.model.Modelo.Usuario;
import br.com.tiespec.model.Util.RNException;

public interface AprovacaoUsuarioInterface extends Serializable {

	/**
	 * Lista os usuários pendentes de aprovação de um cliente de portal em específico
	 * @param first Parâmetro de Paginação - Primeiro Registro a Ser Trazido
	 * @param pageSize Parâmetro de Paginação - Quantidade de registros a serem recuperados
	 * @param sortField Parâmetro de Paginação - Campo utilizado para ordenação
	 * @param sortOrder Parâmetro de Paginação - Tipo de Ordenação (DESC, ASC, null)
	 * @param idClientePortal Parâmetro de Busca - Identificação do cliente de portal qe servirá como filtro de usuários
	 * @param varNome Parâmetro de Busca - (Parte d)O Nome Completo ou (Parte d)o Nome Curto do usuário.
	 * @param varEmail Parâmetro de Busca -  (Parte d)O email do usuário
	 * @param varCadastroDe Parâmetro de Busca - Data do cadastro de usuário
	 * @param varCadastroAte Parâmetro de Busca - Data do cadastro de usuário
	 * @return Lista de Usuários pendentes de aprovação em um cliente de portal
	 */
	public List<Usuario> listarUsuario(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder, Long idClientePortal, String varNome,
			String varEmail, Date varCadastroDe, Date varCadastroAte);

	/**
	 * 
	 * @param idClientePortal Parâmetro de Busca - Identificação do cliente de portal qe servirá como filtro de usuários
	 * @param varNome Parâmetro de Busca - (Parte d)O Nome Completo ou (Parte d)o Nome Curto do usuário.
	 * @param varEmail Parâmetro de Busca -  (Parte d)O email do usuário
	 * @param varCadastroDe Parâmetro de Busca - Data do cadastro de usuário
	 * @param varCadastroAte Parâmetro de Busca - Data do cadastro de usuário
	 * @return Contagem Total de Usuários que conferem com os filtros informados
	 */
	public Integer countUsuario(Long idClientePortal, String varNome, String varEmail,
			Date varCadastroDe, Date varCadastroAte);

	
	/**
	 * Retorna uma instância de usuário com o ID informado
	 * @param id Chave Primária do Usuario a ser selecionado
	 * @return Objeto do usuário que possui o ID informado
	 */
	public Usuario selecionarUsuario(Long id);
	
	
	/**
	 * Aprova o usuário de um cliente de portal, ativando o registro do usuário e enviando a senha de acesso.
	 * @param id Chave Primária que identifica o Usuário a ser ativado
	 * @throws RNException
	 */
	public void aprovarUsuario(Long id) throws RNException;
	
}